package com.py.framework.service;

import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

import com.py.framework.entity.UserEntity;

/**
 * 用户管理Service
 * 
 * @author Leegern
 * @date 2018年4月25日
 */
public interface UserService {

	/**
	 * 分页查询用户列表
	 * 
	 * @param params
	 * @return
	 */
	List<UserEntity> queryUsersForPage(Map<String, Object> params);

	/**
	 * 根据用户Id获取用户信息
	 * 
	 * @param id
	 *            用户Id
	 * @return
	 */
	UserEntity findOneUser(long id);

	/**
	 * 添加用户信息
	 * 
	 * @param entity
	 *            用户实体
	 * @return
	 */
	int addUserInfo(UserEntity entity);

	/**
	 * 修改用户信息
	 * 
	 * @param entity
	 *            用户实体
	 * @return
	 */
	int updateUserInfo(UserEntity entity);

	/**
	 * 批量删除用户
	 * 
	 * @param ids
	 *            用户Id集合
	 * @param currUserId
	 *            当前用户Id
	 * @return
	 */
	int batchDelUsers(List<Long> ids, long currUserId);

	/**
	 * 根据用户账号查询用户信息
	 * 
	 * @param username
	 *            用户账号
	 * @return
	 */
	UserEntity getUserByPrincipal(String username);

	/**
	 * 根据用户账号删除标记查询用户信息
	 * 
	 * @param username
	 *            用户账号
	 * @return
	 */
	UserEntity getUserByTwoPrincipal(String username);

	/**
	 * 根据区域Id获取用户数据
	 * 
	 * @param areaId
	 *            区域Id
	 * @return
	 */
	List<UserEntity> getUsersByAreaId(String areaId);

	/**
	 * 根据部门Id获取用户数据
	 * 
	 * @param officeId
	 *            部门Id
	 * @return
	 */
	List<UserEntity> getUsersByOfficeId(String officeId);

	/**
	 * 获取所有用户数据
	 * 
	 * @return
	 */
	List<UserEntity> getAllUsers();

	/**
	 * 根据姓名查询用户信息
	 * 
	 * @param realName
	 *            用户姓名
	 * @return
	 */
	List<UserEntity> getUsersByName(String realName);

	/**
	 * 根据用户名查询用户信息
	 * 
	 * @param username
	 *            用户名
	 * @return
	 */
	List<UserEntity> getUsersByUsername(String username);

	/**
	 * 根据用户Id集合查询用户信息
	 * 
	 * @param ids
	 *            用户Id集合
	 * @return
	 */
	List<UserEntity> getUsersByIds(List<Long> ids);

	/**
	 * 根据用户Id获取用户下级所有部门用户信息
	 * 
	 * @param id
	 *            用户Id
	 * @return
	 */
	List<UserEntity> getSubUsersById(long userId);

	/**
	 * 判断同区域是否有重复管理员
	 * 
	 * @param userId
	 *            用户Id
	 * @param officeId
	 *            部门Id
	 * @return
	 */
	List<UserEntity> getAreaAdminUsers(long userId, long officeId);

	/**
	 *
	 * @Function 判断是否存在重复部门管理员
	 * @FileName UserServiceService.java
	 * @MethodName getDeptAdminUsers
	 * @param userId
	 *            用户ID
	 * @param officeId
	 *            部门ID
	 * @return
	 * @Date 2018年7月26日 上午11:14:12
	 * @Author Min DongXv
	 *
	 */
	List<UserEntity> getDeptAdminUsers(long userId, long officeId);

	/**
	 *
	 * @Function 通过部门ID获取部门管理员信息
	 * @FileName UserService.java
	 * @MethodName getAllDeptAdmin
	 * @param deptIds
	 *            部门ID
	 * @return
	 * @Date 2018年7月26日 上午11:27:44
	 * @Author Min DongXv
	 *
	 */
	List<UserEntity> getAllDeptAdmin(List<Long> deptIds);

	/**
	 * 
	 * @Title: updateLog @Description: 修改登录次数 @param @param
	 *         entity @param @return 参数 @return int 返回类型 @throws
	 */
	int updateLog(UserEntity entity);

	List<UserEntity> getDeptAllUsers(String deptId);

	List<Long> getDeptManager(List<Long> deptIds);

	List<UserEntity> getDirectUsersByOfficeIds(String officeId);

	/**
	 * 获取联合奖惩部门token
	 * 
	 * @param deptId
	 * @return
	 */
	String getLhjcToken(long deptId);

	/**
	 * 获取部门管理员的所有顶级部门id
	 * @return
	 */
	List<LinkedHashMap> getManagerDeptList();

	/**
	 * 
	 *
	 * @Function 获取权限内的用户ID
	 * @FileName UserService.java
	 * @MethodName getDealUser
	 * @param userInfo
	 * @return
	 * @Date 2018年12月3日 下午5:41:27
	 * @Author Min DongXv
	 *
	 */
	List<Long> getDealUser(UserEntity userInfo);

	List<String> findUserRole();
}